/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.dahg.ues.speech.servicios;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.dahg.ues.speech.servicios.modelo.Evaluacion;
import org.dahg.ues.speech.servicios.modelo.Palabra;
import org.dahg.ues.speech.servicios.modelo.Texto;
import org.primefaces.model.chart.PieChartModel;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

/**
 *
 * @author dahg
 */
public class ServicioImpl extends JdbcDaoSupport implements Servicio {

    @Override
    public Texto getRandomTexto() {
        StringBuilder consulta=new StringBuilder();
        consulta.append("SELECT * FROM texto ");
        consulta.append("WHERE id >= RANDOM() * ");
        consulta.append("(SELECT MAX(i.id) FROM texto i) LIMIT 1");
        
        Texto texto = getJdbcTemplate().queryForObject(consulta.toString(), new RowMapper<Texto>() {

            @Override
            public Texto mapRow(ResultSet rs, int i) throws SQLException {
                Texto t = new Texto();
                t.setId(rs.getInt("id"));
                t.setCuerpo(rs.getString("cuerpo"));
                t.setUserName(rs.getString("fk_usuario"));
                return t;
            }
        
        });
        
        return texto;

    }

    @Override
    public Evaluacion evaluateTexto(Texto texto, String textoEvaluar) {
        Evaluacion evaluacion=new Evaluacion();
        PieChartModel pieModel = new PieChartModel();
        pieModel.setTitle("Resultado evaluacion");
        pieModel.setLegendPosition("w");
        
        List<Palabra> palabrasEvaluar = textoToPalabras(textoEvaluar);
        List<Palabra> palabras = textoToPalabras(texto.getCuerpo());
        
        for(int i=0;i<palabras.size();i++) {
            palabras.get(i).setResultado(
                    palabras.get(i).getTexto().trim().equals(palabrasEvaluar.get(i).getTexto().trim())
                    );
        }
        
        evaluacion.setPieModel(pieModel);
        evaluacion.setPalabras(palabras);
        return evaluacion;
    }
    
    private List<Palabra> textoToPalabras(String texto) {
        List<Palabra> palabras = new ArrayList<Palabra>();
        
        String[] arregloPalabras = texto.split(" ");
        for(String palabra:arregloPalabras) {
            palabras.add(new Palabra(palabra));
        }
        return palabras;
    }

    private String appName;
    public void setAppName(String appName) {
        this.appName = appName;
    }
    
    @Override
    public String getAppName() {
        return appName;
    }
}
